import { ElMessage } from 'element-plus'
import dayjs from 'dayjs'
export const isDev = import.meta.env.MODE === 'development'
let toastTimer: any
export const Toast = () => {
  ElMessage.closeAll()
  toastTimer && clearTimeout(toastTimer)
  toastTimer = setTimeout(() => {
    ElMessage.closeAll()
  }, 3000)
  return ElMessage
}
/**
 * 延迟执行
 * @param ms {Number} 延迟时间，单位：ms
 * @returns {Promise}
 */
export function delay(ms: number = 2000) {
  return new Promise((resolve) => setTimeout(resolve, ms))
}

// 添加复制功能
export const copyToClipboard = async (text: string) => {
  try {
    await navigator.clipboard.writeText(text)
    Toast().success('复制成功')
  } catch (err) {
    console.error('复制失败:', err)
    Toast().error('复制失败')
  }
}

/**
 * 将映射对象转换为选项数组
 * @param map 映射对象，如 { key1: 'value1', key2: 'value2' }
 * @returns 选项数组，如 [{ value: 'key1', label: 'value1' }, { value: 'key2', label: 'value2' }]
 */
export const mapToOptions = <T extends { [key: string]: string }>(map: T) => {
  return Object.entries(map)
    .map(([value, label]) => ({
      label,
      value: +value,
    }))
    .sort((a, b) => a.value - b.value)
}
/**
 * 检查值是否为真值(truthy)
 * @param value 要检查的值
 * @returns 如果值是truthy则返回true，否则返回false 0当真处理
 *
 * @example
 */
export function truthy<T>(value: T): boolean {
  // 显式处理所有falsy值
  if (
    value === false ||
    value === null ||
    value === undefined ||
    Number.isNaN(value) ||
    value === ''
  ) {
    return false
  }
  // 其他所有情况都视为truthy
  return true
}
/**
 * 获取时间格式化
 * @param stamp 时间戳
 * @param format 格式化格式，默认 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} 格式化后的时间字符串
 */
export function dateFormat(stamp: string | number, format = 'YYYY-MM-DD HH:mm:ss'): string {
  if (!stamp) return ''
  const time = dayjs(typeof stamp === 'string' ? +stamp : stamp)
  if (!time.isValid()) {
    return '无效时间'
  }
  return time.format(format)
}
/**
 * 生成随机id
 */
export function generateRandomId(): string {
  return Math.random().toString(36).slice(2, 9)
}
